package server

import (
	"fiber/config"
	"fmt"
	"os"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

/*
*
读取配置文件
*/
func InitializeConfig() *viper.Viper {
	// 设置配置文件路径
	config_file := "config.yaml"
	if configEnv := os.Getenv("VIPER_CONFIG"); configEnv != "" {
		config_file = configEnv
	}

	// 初始化 viper
	v := viper.New()
	v.SetConfigFile(config_file)
	v.SetConfigType("yaml")
	if err := v.ReadInConfig(); err != nil {
		panic(fmt.Errorf("read config failed: %s \n", err))
	}

	// 监听配置文件
	v.WatchConfig()
	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed:", e.Name)
		// 重载配置
		if err := v.Unmarshal(&config.Config); err != nil {
			fmt.Println(err)
		}
		config.Phrase()

		// 重启日志
		InitializeLog()
	})

	// 将配置赋值给全局变量
	if err := v.Unmarshal(&config.Config); err != nil {
		fmt.Println(err)
	}

	// 短语化
	config.Phrase()

	return v
}
